home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 47.7z / BS1 part 47 / HiSoft BASIC v1.04 (1989)(HiSoft)(Disk 2 of 2)[h Band].7z / HiSoft BASIC v1.04 (1989)(HiSoft)(Disk 2 of 2)[h Band].adf / music / Music.BAS < prev    next >
Encoding:
BASIC Source File  |  1988-12-03  |  4.2 KB  |  189 lines

  1. Setup:
  2.   DIM Waveform%(256)
  3.   DEF FNYWaveform(a)=ABS(Waveform%(a)-128)
  4.   
  5.   SCREEN 1,320,200,2,1
  6.   WINDOW 2,"Waveform",(0,0)-(256,63),22,1
  7.  
  8.   FOR x=0 TO 256
  9.     Waveform%(x)=127*SIN(x/20)
  10.   NEXT x
  11.  
  12.  
  13.   WINDOW 3,"Function",(195,80)-(310,175),22,1
  14.   WINDOW OUTPUT 3
  15.   LINE (5,5)-(55,30),1,b
  16.   PSET (5,17)
  17.   FOR x=0 TO 48
  18.     LINE -((x+5),17-10*SIN(x/3.8))
  19.   NEXT x
  20.   LINE (59,5)-(110,30),1,b
  21.   LINE (59,18)-(67,7) : LINE -(83,27)
  22.   LINE -(99,7) : LINE -(107,18)
  23.   LINE (5,35)-(55,60),1,b
  24.   LINE (7,47)-(7,37)
  25.   LINE -(18,37) : LINE -(18,57)
  26.   LINE -(30,57) : LINE -(30,37)
  27.   LINE -(41,37) : LINE -(41,57)
  28.   LINE -(53,57) : LINE -(53,47)
  29.   LINE (59,35)-(110,60),1,b
  30.   LOCATE 6,7 : PRINT  "Clear"
  31.   LINE (5,65)-(55,90),1,b
  32.   LOCATE 9,2 : PRINT "Save"
  33.   LINE (59,65)-(110,90),1,b
  34.   LOCATE 9,7 : PRINT "Load"
  35.   
  36.   WINDOW OUTPUT 2
  37.   GOSUB ShowWave
  38.  
  39.  
  40.   ON MOUSE GOSUB MouseControl
  41.   MOUSE ON
  42.  
  43.   WINDOW 3
  44.  
  45. KeyInput:
  46.   a$=INKEY$
  47.   F=0
  48.   IF a$="" THEN F=0 : GOTO KeyInput
  49.   IF a$=CHR$(9) THEN F=261.63
  50.   IF a$="1" THEN F=277.18
  51.   IF a$="q" THEN F=293.66
  52.   IF a$="2" THEN F=311.13
  53.   IF a$="w" THEN F=329.63
  54.   IF a$="e" THEN F=349.23
  55.   IF a$="4" THEN F=369.99
  56.   IF a$="r" THEN F=392!
  57.   IF a$="5" THEN F=415.3
  58.   IF a$="t" THEN F=440!
  59.   IF a$="6" THEN F=466.16
  60.   IF a$="y" THEN F=493.88
  61.   IF a$="u" THEN F=523.25
  62.   IF a$="8" THEN F=554.37
  63.   IF a$="i" THEN F=587.58
  64.   IF a$="9" THEN F=622.25
  65.   IF a$="o" THEN F=659.28
  66.   IF a$="p" THEN F=698.48
  67.   IF a$="-" THEN F=739.99
  68.   IF a$="[" THEN F=784!
  69.   IF a$="=" THEN F=830.61
  70.   IF a$="]" THEN F=880
  71.   IF a$=CHR$(93) THEN F=932.33
  72.   IF a$=CHR$(13) THEN F=987.76
  73.   IF a$=CHR$(139) THEN F=1046.52
  74.   IF F=0 THEN KeyInput
  75.  
  76. Play:
  77.   Vol=127 : IF F=0 THEN l=0
  78.   SOUND WAIT
  79.   SOUND F,3,Vol,0
  80.   SOUND F,3,Vol,1
  81.   SOUND RESUME
  82. GOTO KeyInput
  83.  
  84. MouseControl:
  85.   IF WINDOW(0)=2 THEN AlterWaveform
  86.   IF WINDOW(0)=3 THEN AlterFunction
  87. RETURN
  88.  
  89. AlterWaveform:
  90.   WINDOW 2
  91.   WHILE MOUSE(0)<0
  92.     x=MOUSE(5)
  93.   IF x>256 THEN GOSUB ShowWave : RETURN
  94.   IF x<1 THEN x=1
  95.   y=MOUSE(6)
  96.   IF y> 63 THEN GOSUB ShowWave :RETURN
  97.   LINE (x-1,FNYWaveform(x-1)/4) - (x,FNYWaveform(x)/4),0
  98.   LINE (x-1,FNYWaveform(x-1)/4)-(x,y),1
  99.   Waveform%(x)=127-(y*4)
  100. WEND
  101.   GOSUB ShowWave
  102. RETURN
  103.  
  104. AlterFunction:
  105.   Test=MOUSE(0)
  106.   x=MOUSE(3)
  107.   y=MOUSE(4)
  108.   IF x>4 AND x<56 AND y>4 AND y<31 THEN
  109.     WINDOW 3 : PAINT (7,6),3,1
  110.     FOR x=0 TO 256
  111.       Waveform%(x)=127*SIN(x/20)
  112.     NEXT x
  113.     GOSUB ShowWave
  114.     WINDOW 3 : PAINT (6,6),0,1
  115.   END IF
  116.   IF x>58 AND x<111 AND y>4 AND y<31 THEN
  117.     WINDOW 3 : PAINT (60,6),3,1
  118.     FOR x=0 TO 256
  119.       IF x<41 THEN Waveform%(x)=x*3 : a=x*3
  120.       IF (x>=41 AND x<126) OR (x>=210) THEN a=a-2.57 : Waveform%(x)=a
  121.       IF x>=126 AND x<210 THEN a=a+2.57 : Waveform%(x)=a
  122.     NEXT x
  123.     GOSUB ShowWave
  124.     WINDOW 3 : PAINT (60,6),0,1
  125.   END IF
  126.   IF x>4 AND x<61 AND y>34 AND y<61 THEN
  127.     WINDOW 3 : PAINT (6,36),3,1
  128.     FOR x=0 TO 256
  129.       IF x<64 OR (x>=128 AND x<191) THEN Waveform%(x)=127
  130.       IF (x>=64 AND x<128) OR x>192 THEN Waveform%(x)=-128
  131.     NEXT x
  132.     GOSUB ShowWave
  133.     WINDOW 3 : PAINT (6,36),0,1  
  134.   END IF
  135.   IF x>58 AND x<111 AND y>34 AND y<61 THEN
  136.     WINDOW 3
  137.     PAINT (60,36),3,1
  138.     FOR x=0 TO 256
  139.       Waveform%(x)=0
  140.     NEXT x
  141.     GOSUB ShowWave
  142.     WINDOW 3 : PAINT (60,36),0,1
  143.   END IF
  144.   IF x>4 AND x<61 AND y>64 AND y<91 THEN
  145.     WINDOW 3
  146.     PAINT (6,66),3,1
  147.     GOSUB EnterName
  148.       IF Nam$="" THEN PAINT (6,66),0,1 : RETURN
  149.       OPEN Nam$ FOR OUTPUT AS 1
  150.         FOR x=0 TO 256
  151.           PRINT #1,CHR$(127-Waveform%(x));
  152.         NEXT x
  153.       CLOSE 1
  154.       WINDOW 3 : PAINT (6,66),0,1
  155.   END IF
  156.   IF x>58 AND x<111 AND y>64 AND y<91 THEN
  157.     WINDOW 3
  158.     PAINT (62,66),3,1
  159.     GOSUB EnterName
  160.     IF Nam$="" THEN PAINT (62,66),0,1 : RETURN
  161.     OPEN Nam$ FOR INPUT AS 1
  162.       FOR x=0 TO 256
  163.         Waveform%(x)=127-ASC(INPUT$(1,1))
  164.       NEXT x
  165.     CLOSE 1
  166.     WINDOW 3 : PAINT (62,66),0,1
  167.     GOSUB ShowWave
  168.   END IF
  169. RETURN
  170.  
  171. ShowWave:
  172.   WINDOW 2 : CLS
  173.     FOR x=1 TO 256
  174.       LINE (x-1,FNYWaveform(x-1)/4)-(x,FNYWaveform(x)/4),1
  175.     NEXT x
  176.   WINDOW 3
  177.   WAVE 0,Waveform%
  178.   WAVE 1,Waveform%
  179. RETURN
  180.  
  181. EnterName:
  182.   WINDOW 4,"Enter Filename:",(5,100)-(300,110),0,1
  183.   CLS : LINE INPUT Nam$ 
  184.   IF Nam$="=" OR Nam$="*" THEN Nam$=Altname$
  185.   IF Nam$<>"" THEN Altname$=Nam$
  186.   WINDOW CLOSE 4 : WINDOW 3
  187. RETURN
  188.  
  189.